Aurora MySQL バージョン 3 での init_connect パラメータの注意点

Aurora MySQL バージョン 3 での init_connect パラメータの注意点

Clock Icon2024.09.24

こんにちは。テクニカルサポートチームのShiinaです。

はじめに

MySQL の init_connect パラメータは利用していますか?
上記パラメータは MySQL 接続時に特定の初期化処理などを実行したいときに利用できます。
利用する Aurora バージョンの違いによっては init_connect パラメータが適用できない場合があります。
今回は動作の違いについて検証してみました。

結論

Aurora MySQL バージョン 3 では CONNECTION_ADMIN 権限を持つユーザーには init_connect パラメータは適用されません。
Aurora MySQL DB インスタンスを作成時に登録されるマスターユーザー(デフォルト値:admin)は CONNECTION_ADMIN 権限を持つため、上記パラメータを適用することはできません。

init_connect パラメータとは

クライアントが MySQL サーバーに接続するたびに自動的に実行される SQL ステートメントを指定するために使用されるパラメータです。
この機能を利用することで、MySQL に接続時に特定の初期化処理を実行することが可能です。
例えば、特定のユーザアカウントに対しては自動コミットを無効化したいというケースなどに用いることができます。
都度セッションパラメータを一時的に変更して利用するシーンにおいては、設定の手間を減らすことができて便利な一面があります。

CONNECTION_ADMIN 権限とは

特定の接続管理タスクを実行するために必要な権限です。
この権限を持つユーザーは、他のユーザーの接続を管理したり、接続を強制的に終了する操作を行うことができます。
強力な権限であるため、慎重な管理と信頼できるユーザーにのみ付与することが推奨されます。

やってみた

Aurora MySQL バージョン 3 にて検証ユーザアカウントを利用して、CONNECTION_ADMIN 権限有無の違いによる動作検証を行ってみました。

検証環境

  • エンジンバージョン
    8.0.mysql_aurora.3.05.2

事前準備

パラメータグループファミリー aurora-mysql8.0 用のパラメータグループを作成し、次のようにパラメータを設定します。

  • init_connect パラメータ
    検証ユーザアカウント(testuser)に対して自動コミットを無効化するパラメータ値をパラメータグループに設定します。
SET autocommit=CASE CURRENT_USER() WHEN "testuser@%" THEN 0 ELSE 1 END;
  • autocommit パラメータ
    設定は行わず、デフォルト値である ON (自動コミットが有効)を利用します。

作成したパラメータグループを DB クラスターに関連付けします。

データベースの詳細-RDS-マネジメントコンソール (1)

検証ユーザアカウントを登録し、テーブルの参照権限のみを付与しておきます。

CREATE USER 'testuser' IDENTIFIED BY 'yourpassword';
GRANT SELECT ON *.* TO 'testuser';
FLUSH PRIVILEGES;

CONNECTION_ADMIN 権限なしの場合

検証ユーザアカウントで Aurora MySQL に接続します。

mysql -p -u testuser -h test-database-1-instance-1.c9s4eucwustm.ap-northeast-1.rds.amazonaws.com

現在のユーザと autocommit の設定値を確認します。

mysql> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| testuser@%     |
+----------------+
1 row in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | OFF   |
+---------------+-------+
1 row in set (0.01 sec)

init_connect パラメータが正しく適用されており、autocommit が OFF(自動コミットが無効化)になっていることが確認できます。

CONNECTION_ADMIN 権限ありの場合

では次に CONNECTION_ADMIN 権限が付与されている場合の動作について確認してみます。
検証ユーザアカウントに対して CONNECTION_ADMIN 権限を付与してみます。

mysql> GRANT CONNECTION_ADMIN ON *.* TO 'testuser';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

検証ユーザアカウントで再度 Aurora MySQL に接続します。

mysql -p -u testuser -h test-database-1-instance-1.c9s4eucwustm.ap-northeast-1.rds.amazonaws.com

現在のユーザと autocommit の設定値を確認します。

mysql> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| testuser@%     |
+----------------+
1 row in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+
1 row in set (0.01 sec)

autocommit が ON(自動コミットが有効化)になっており、init_connect パラメータが適用されていないことが確認できます。

まとめ

Aurora MySQL バージョン 3 では CONNECTION_ADMIN 権限を持つユーザーには init_connect パラメータは適用されません。
また、read_only パラメータも同様です。
上記パラメータを利用している場合は Aurora MySQL バージョン 2 からバージョン 3 へのアップグレードを行う際には注意が必要です。

最後までご覧いただきありがとうございました。
本記事が誰かのお役に立てれば幸いです。

参考

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Reference.ParameterGroups.html

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Compare-v2-v3.html#AuroraMySQL.mysql80-parameter-changes

https://aws.amazon.com/jp/blogs/news/best-practices-for-configuring-parameters-for-amazon-rds-for-mysql-part-3-parameters-related-to-security-operational-manageability-and-connectivity-timeout/

https://dev.mysql.com/doc/refman/8.0/ja/server-system-variables.html

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.